<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>11.14</title>
</head>

<body>
    <script>
        // let arr=[1,2,3,4,5];
        // let iter=arr[Symbol.iterator]();
        // console.log(iter.next())
        // console.log(iter.next())
        // console.log(iter.next())
        // console.log(iter.next())
        // console.log(iter.next())
        // console.log(iter.next())
        // for (const iterator of arr) {
        //     console.log(arr)
        // }
        // var obj={
        //     a:1,
        //     b:2,
        //     c:3
        // }
        // obj[Symbol.iterator]=function(){
        //     var keys=Object.keys(this);
        //     console.log(keys) //['a', 'b', 'c']
        // }
        // for (const k of obj) {
        //     console.log(k)
        // }

        // setTimeout(()=>{
        //     console.log("111");
        //     setTimeout(()=>{
        //         console.log("222");
        //         setTimeout(()=>{
        //             console.log("333");
        //         },3000)
        //     },2000)
        // },1000)
        //     function* generator() {
        //         yield setTimeout(() => {
        //             console.log("111")
        //             hw.next()
        //         }, 1000);
        //         yield setTimeout(() => {
        //             console.log("222");
        //             hw.next()
        //         }, 2000)
        //         yield setTimeout(() => {
        //             console.log("333");
        //         }, 3000)
        //     }
        //     let hw=generator()
        //    console.log( hw.next())

        //0 1 1 2 3 5 8 13
        // function* fibonacci(n) {
        //     let a = 0, b = 1;
        //     for (let i = 0; i < n; i++) {
        //         yield a;
        //         [a, b] = [b, a + b];
                
        //     }
        // }

        // // 测试
        // for (const num of fibonacci(10)) {
        //     console.log(num);
        // }
        //     console.log(void 0)
        //    console.log(typeof null===typeof undefined)

        // 1.请编写一个生成器函数，用于生成1到n的平方数。
        // 解析：需要编写一个生成器函数，接收一个参数n，返回1到n的平方数。
        // function * one(n){
        //     for(let i=1;i<=n;i++){
        //         yield i*i
        //     }
        // }
        // let arr=[];
        // for (const key of one(5)) {
        //    arr.push(key)
        // }
        // console.log(arr)

        //2..请你编写一个生成器函数，并返回一个可以生成 斐波那契数列 的生成器对象。
        // 斐波那契数列 的递推公式为 Xn = Xn-1 + Xn-2 。  X3  X2 X1 
        // 这个数列的前几个数字是 0, 1, 1, 2, 3, 5, 8, 13 。    
        // 第3个  = 第2个+第1个
        // 1        1     0
        // 3        2    1
        // 2        1    1 
        // function* two(n){
        //     let a=0;b=1;
        //     for(let i=0;i<=n;i++){
        //         yield a;
        //         [a,b]=[b,a+b];
        //     }    
        // }
        // for (const num of two(10)) {
        //     console.log(num)
        // }

        // 3.请编写一个生成器函数，用于生成一个包含1到n的所有偶数的数组。
        // 解析：需要编写一个生成器函数，接收一个参数n，返回一个包含1到n的所有偶数的数组。
        // function* three(n){
        //     for(let i=1;i<=n;i++){
        //         if(i%2==0){
        //             yield i
        //         }
        //     }
        // }
        // for (const num of three(20)) {
        //     console.log(num)
        // }

        // 4. 请编写一个生成器函数，用于生成一个包含1到n的所有质数的数组。
        // 解析：需要编写一个生成器函数，接收一个参数n，返回一个包含1到n的所有质数的数组    2 3 5 7 
        function* four(n){
            for(let i=2;i<=n;i++){
                let flag=true
                for(let j=2;j<=Math.sqrt(i);j++){    //i必须从 4  5 6 7 8 9 10    
                  if(i%j==0){   
                    flag=false
                  }
                }
                if(flag){
                    yield i
                }
            }
        }
        let arr=[]
        for (const num of four(10)) {
           arr.push(num)
        }
        console.log(arr)

        // 5.给你一个整数 n 。按下述规则生成一个长度为 n + 1 的数组 nums ：
        // nums[0] = 0
        // nums[1] = 1
        // 当 2 <= 2 * i <= n 时，nums[2 * i] = nums[i]
        // 当 2 <= 2 * i + 1 <= n 时，nums[2 * i + 1] = nums[i] + nums[i + 1]
        // 返回生成数组 nums 中的 最大 值。
        // let n=10;
        // let nums=[];
        // nums.length=n+1;
        // nums[0] = 0
        // nums[1] = 1
        // for(let i=0;i<=n;i++){
        //     if(2 <= 2 * i <= n){
        //         nums[2 * i] = nums[i]
        //     }
        //     if(2*i==n){
        //         break
        //     }
        //     if(2 <= 2 * i + 1 <= n){
        //         nums[2 * i + 1] = nums[i] + nums[i + 1]
        //     }
        //     if(2*i+1==n){
        //         break
        //     }
        // }
        // let max=0;
        // for(let i=0;i<nums.length;i++){
        //     if(nums[i]>max){
        //         max=nums[i]
        //     }
        // }
        // console.log("数组nums中的最大值为"+max)

        // 7. 连续数列
        // 给定一个整数数组，找出总和最大的连续数列，并返回总和。
        // 示例：
        // 输入： [-2,1,-3,4,-1,2,1,-5,4]输出： 6解释： 连续子数组 [4,-1,2,1] 的和最大，为 6。
        // let arr=[-2,1,-3,4,-1,2,1,-5,4];
        // let maxSum=arr[0];
        // let currentSum=arr[0];
        // for(let i=0;i<arr.length;i++){
        //     currentSum=Math.max(arr[i],currentSum+arr[i]);   
        //     maxSum = Math.max(maxSum, currentSum);
        // }
        // console.log(maxSum)


        // var $={
        //     get(url,callback){
        //         let ajax=new XMLHttpRequest();
        //         ajax.open("GET",url);
        //         ajax.send();
        //         ajax.onreadystatechange=function(){
        //             if(ajax.readyState==4){
        //                 let res=ajax.responseText();
        //                 callback(JSON.parse(res))
        //             }
        //         }
        //     },
        //     post(url,data,callback){
        //         let ajax=new XMLHttpRequest();
        //         ajax.open("POST",url);
        //         ajax.setRequestHeader("Content-Type","application/json");
        //         ajax.send(JSON.stringify(data));
        //         ajax.onreadystatechange=function(){
        //             if(ajax.readyState==4){
        //                 let res=JSON.parse(ajax.responseText());
        //                 callback(res);
        //             }
        //         }
        //     }
        // }
    </script>
</body>

</html>